package middleware

import (
	"fmt"
	"sysu-giep/internal/config"
	"time"

	"github.com/gin-contrib/cors"
	"github.com/gin-gonic/gin"
)

// CORS CORS中间件
func CORS(cfg *config.CORSConfig) gin.HandlerFunc {
	config := cors.DefaultConfig()
	
	// 调试：打印CORS配置
	fmt.Printf("CORS配置: AllowAllOrigins=%v, AllowedOrigins=%v\n",
		len(cfg.AllowedOrigins) == 0, cfg.AllowedOrigins)
	
	// 创建CORS中间件
	corsMiddleware := cors.New(config)
	
	// 返回包装的中间件，添加调试信息
	return func(c *gin.Context) {
		fmt.Printf("CORS请求: Origin=%s, Method=%s\n",
			c.Request.Header.Get("Origin"), c.Request.Method)
		corsMiddleware(c)
	}

	// 设置允许的源
	if len(cfg.AllowedOrigins) > 0 {
		config.AllowOrigins = cfg.AllowedOrigins
	} else {
		config.AllowAllOrigins = true
	}

	// 设置允许的方法
	if len(cfg.AllowedMethods) > 0 {
		config.AllowMethods = cfg.AllowedMethods
	}

	// 设置允许的头部
	if len(cfg.AllowedHeaders) > 0 {
		config.AllowHeaders = cfg.AllowedHeaders
	}

	// 设置暴露的头部
	if len(cfg.ExposedHeaders) > 0 {
		config.ExposeHeaders = cfg.ExposedHeaders
	}

	// 设置是否允许携带凭证
	config.AllowCredentials = cfg.AllowCredentials

	// 设置预检请求的缓存时间
	if cfg.MaxAge > 0 {
		config.MaxAge = time.Duration(cfg.MaxAge) * time.Second
	}

	return cors.New(config)
}
